// 此页面进行axios的二次封装

/** axios封装
 * 请求拦截、相应拦截、错误统一处理
 */
import axios from 'axios'
import QS from 'qs'
// import { Toast } from 'vant';
// eslint-disable-next-line no-unused-vars
import store from '../store/index'

import videoHttp from '../http/video.http'
var zhaopinurl = videoHttp.zhaoPinHttp
// 环境的切换
if (process.env.NODE_ENV === 'development') {
  axios.defaults.baseURL = zhaopinurl
  // axios.defaults.baseURL = 'http://jmx-kfdj.com/kfhl'// 正式版
  // axios.defaults.baseURL = 'http://192.168.0.199:8080/kfhl';
} else if (process.env.NODE_ENV === 'debug') {
  axios.defaults.baseURL = ''
} else if (process.env.NODE_ENV === 'production') {
  axios.defaults.baseURL = zhaopinurl
  // axios.defaults.baseURL = 'http://jmx-kfdj.com/kfhl'
  // axios.defaults.baseURL = 'http://192.168.0.199:8080/kfhl';
}

// 请求超时时间
axios.defaults.timeout = 10000

// post请求头
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8'

// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 每次发送请求之前判断是否存在token，如果存在，则统一在http请求的header都加上token，不用每次请求都手动添加了
    // 即使本地存在token，也有可能token是过期的，所以在响应拦截器中要对返回状态进行判断
    const token = sessionStorage.token
    // const token = "eyJhbGciOiJIUzI1NiIsIlR5cGUiOiJKd3QiLCJ0eXAiOiJKV1QifQ.eyJVU0VSX0lEIjoiYmZlNDVlODU2ZjY0NDIwNjgzYjI3MjcxZDM5NzliOTIiLCJleHAiOjE2MDcwOTAzNzl9.Kudy-tjE9Fj_xFP_N5JRxtkY0RRPZBA1Vn_26hpY3YI";
    token && (config.headers.Authorization = token)
    return config
  },
  error => {
    return Promise.error(error)
  })

// 响应拦截器
axios.interceptors.response.use(
  response => {
    if (response.status === 200) {
      return Promise.resolve(response)
    } else {
      return Promise.reject(response)
    }
  },
  // 服务器状态码不是200的情况
  error => {
    if (error.response.status) {
      switch (error.response.status) {
        // 401: 未登录
        // 未登录则跳转登录页面，并携带当前页面的路径
        // 在登录成功后返回当前页面，这一步需要在登录页操作。
        case 401:

          break
          // 403 token过期
          // 登录过期对用户进行提示
          // 清除本地token和清空vuex中token对象
          // 跳转登录页面
        case 403:
          if (sessionStorage.sys === 'ANDROID') {
            window.WebViewJavascriptBridge.callHandler('skipToLogin', {'param': ''}, function (responseData) {})
          } else {
            window.location.href = '../../../kfhl/frontlogin/lu'
          }
          break
          // 404请求不存在
        case 404:
          // Toast({
          //     message: '网络请求不存在',
          //     duration: 1500,
          //     forbidClick: true
          // });
          break
          // 其他错误，直接抛出错误提示
        default:
                    // Toast({
                    //     message: error.response.data.message,
                    //     duration: 1500,
                    //     forbidClick: true
                    // });
      }
      return Promise.reject(error.response)
    } else {
      // 处理断网的情况
      // eg:请求超时或断网时，更新state的network状态
      // network状态在app.vue中控制着一个全局的断网提示组件的显示隐藏
      // 关于断网组件中的刷新重新获取数据，会在断网组件中说明
      if (!window.navigator.onLine) {
        return '请检查您的网络连接情况'
      } else {
        return Promise.reject(error)
      }
    }
  }
)
/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get (url, params) {
  return new Promise((resolve, reject) => {
    axios.defaults.baseURL = zhaopinurl
    axios.get(url, {
      params: params
    })
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post (url, params) {
  return new Promise((resolve, reject) => {
    axios.defaults.baseURL = zhaopinurl
    axios.post(url, QS.stringify(params))
      .then(res => {
        resolve(res.data)
      })
      .catch(err => {
        reject(err.data)
      })
  })
}
